#ifndef GAMELISTENER_H_
#define GAMELISTENER_H_

#include "../Objects/Events/GameEvent.h"

namespace OOInterface {


class GameListener;
typedef boost::shared_ptr< GameListener > GameListenerPtr;

/**
 * GameListeners provide the ability to hook into the AIInterface and listen
 * for any GameEvents that may be occurring within the game. This allows for
 * time sensitive events to be distributed without constantly polling the
 * AIInterface for the information.
 *
 * Refer to AIInterface to see how to register a GameListener with it.
 */
class GameListener
{
public:

	/**
	 * handle( ... )
	 * Handles a GameEvent that has occurred. Refer to
	 * the GameEvent hierarchy to see what GameEvents are
	 * available to be handled.
	 *
	 * @param e The event that has been generated in the current game.
	 */
	virtual void handle( ConstGameEventPtr e ) = 0;
};

}

#endif /*GAMELISTENER_H_*/
